Einleitung

The simple graph has brought more information to the data analyst’s mind than any other device.1

Dieses Zitat des bekannten Statistikers und (Mit-)Erfinders des Boxplots John Tukey lässt sich zu Beginn des ersten Kapitels des Einführungswerks “R for Data Science” von Hadley Wickham und Garrett Grolemund finden.

Der Einschätzung Tukeys ist zweifelsohne beizupflichten: Es sind aktuell wohl nur wenige statistische Untersuchungen bekannt, die nicht auf irgendeine denkbare Art und Weise eine Form graphischer Darstellung zur Erklärung der Befunde nutzen würden. Dass das Analysetool “graphische Darstellung” derartig oft genutzt wird und eine so große Wertschätzung genießt, liegt dabei eigentlich auf der Hand; der bekannte Ausspruch, dass ein Bild mehr sage, als 1.000 Worte gilt wohl auch in der statistischen Analyse: eine gut erstellte und übersichtliche Graphik vermag es wirklich, Befunde kurz und knapp und vor allen Dingen allgemein verständlich auf den Punkt zu bringen - und dabei vielleicht auch den Blick für bestimmte interessante Punkte zu schärfen. Schaut man jedoch dagegen beispielsweise auf eine Regressionstabelle eines Mehrebenenmodells, so darf angezweifelt werden, ob das auch hierbei der Fall wäre.

Um jedoch dem Anspruch an die Übersetzung von Informationen in großer Masse in Graphiken gerecht zu werden, brauchen die Analysierenden zweckmäßige und vielseitige Tools. Die Programmiersprache R offenbart im Umgang mit großen Datenmengen gegenüber Konkurrenten wie SPSS von IBM oder auch Stata entscheidende Vorteile. Zwar können in den anderen Statistiksoftware-Angeboten ebenfalls Graphiken erstellt werden (sowohl durch das Klicken in Menüs, als auch syntaxbasiert) - jedoch kann wohl mit Recht behauptet werden, dass die Möglichkeiten der Visualisierung von Daten in R wesentlich umfassender sind, was vor allem auch an einem Package liegt: ggplot2.

Dieses ist im bekannten und beliebten tidyverse enthalten, einem Meta-Package, welches von Hadley Wickham und seinem Team für die Nutzung durch Data Scientists entwickelt wurde und essentielle und nützliche Packages zur einfachen Installation sammelt. Das Package ggplot2 selbst wird darüber hinaus, ebenso wie viele weitere aus dem tidyverse, immer wieder in Listen über die einfluss- und hilfreichsten Packages in R genannt (siehe z. B. Finnstats 2)

Im folgenden Dokument soll sich nun exemplarisch mit Daten aus der Sozialwissenschaft auseinandergesetzt werden. Dafür wird der Datensatz des ALLBUS (Allgemeine Bevölkerungsumfrage der Sozialwissenschaften, von 2018)3 genutzt.

Es sollen mit Hilfe dieser Daten verschiedene interessante Sachverhalte und Zusammenhänge visuell aufbereitet und analysiert werden - all das unter der Nutzung des R-Packages ggplot2. Im Fokus wird die eigentliche Arbeit mit dem Package selbst stehen. Dessen Möglichkeiten sollen, im Rahmen der kurzen Analysen und Visualisierungen, möglichst voll ausgeschöpft werden, sodass dessen Vorzüge (nicht nur gegenüber anderen Softwarelösungen, sondern auch gegenüber z. B. den Plots aus baseR) für den Nutzenden klar zum Vorschein kommen.

Zur Erstellung genutzte Libraries

Der Vollständigkeit halber werden hier die zur Funktion des interaktiven Dokumentes nötigen Packages gelistet:

# libraries
library(tidyverse)
library(ggthemes)
library(plotly)
library(ymlthis)
library(haven)
library(foreign)
library(esquisse)
library(expss)
library(MASS)
library(car)
library(sjPlot)
library(shiny)

Inhaltlich zu ggplot2

Unlike most other graphics packages, ggplot2 has an underlying grammar, based on the Grammar of Graphics, that allows you to compose graphs by combining independent components. […] Rather than being limited to sets of pre-defined graphics, you can create novel graphics that are tailored to your specific problem4.

Zuerst werden inhaltliche Dinge zu ggplot2 geklärt, wie zum Beispiel die Entstehung und die zugrundeliegende Philosophie. Weiterhin wird kurz auf die Funktionsweise bzw. -prinzipien eingegangen. Anschließend soll in aller Kürze das Package esquisse vorgestellt werden, welches für Lernende genauso wie erfahrene Nutzende im Bezug auf ggplot2 von großem Vorteil sein kann.

Inhaltlich 1: Entstehung von ggplot2, Teil des tidyverse, Wirkung in der R-Community, Grundideen und -prinzipien

Zwischen den Nutzenden von baseR und ggplot2 gibt es eine (mal mehr, mal weniger) hitzig geführte Debatte darüber, welches der Pakete zur Visualisierung von Daten besser geeignet sei. Die sehr kurze Konsultation einer Internet-Suchmaschine mit dem Suchstring ggplot2 vs. baseR ergab zahlreiche Treffer - besonders oft Blogeinträge von Nutzenden, die für eine “Seite” Partei ergreifen. Es wird betont, dass der Code zur Erstellung von Graphiken in ggplot2 wesentlich konziser ist, als in baseR5, oder auch, dass der Code darüber hinaus in ggplot2 außerdem weniger abstrahiert sein müsste (es werden z. B. die Arbeit mit subsets von Daten oder auch das “faceting”, also die Erstellung von gruppierten Graphiken, angesprochen)6. Diese Behauptungen werden im Verlauf dieser Arbeit nochmals aufgegriffen werden, wenn es in Analyseteil 3 um eine direkte Gegenüberstellung der Packages gehen wird.

Um jedoch die Funktionsweise und das Konzept von ggplot2 genau nachvollziehen zu können, ist es sinnvoll, sich in Erinnerung zu rufen, woher die Ideen für das Package stammen. Hadley Wickham griff bei der Entwicklung bezüglich der Grundideen auf die Grammar of Graphics von 20057 zurück - ein von Leland Wilkinson entwickeltes Konzept bzw. eine Art Leitfaden zur Visualisierung von Ergebnissen in der Statistik.

Wickham selbst legte die Kernpunkte gut in einem Artikel aus dem Jahr 2010 8 dar: Zunächst steht die Feststellung im Zentrum, dass es für die Visualisierung mittels Graphiken eine Grammatik geben muss, die eine Grundstruktur gibt. Es geht darum, Graphiken nicht als monolithische Einheiten anzusehen, sondern die verschiedenen Schichten darin zu erkennen. Das wiederum ermögliche, so Wickham, diese einzelnen Schichten auch zu adressieren. Bereits im Abstract von Wickhams Artikel wird somit deutlich angesprochen: durch die “Grammar of Graphics” ist es möglich, nicht mehr nur von verschiedenen Graphikarten, wie z. B. dem Scatterplot, zu sprechen - es wird vielmehr möglich über jede einzelne Ebene der Graphiken etwas auszusagen und damit eine tiefergehende Struktur dieser anzusprechen. Hierzu sei auf folgende Abbildung hingewiesen9:

Bestandteile einer Graphik, nach H. Wickhams Erläuterungen, basierend auf der Grammar of Graphics

In einem Focus Article von 2011 spricht auch Wickham dann die unterschiedlichen Herangehensweisen des Erstellens von Graphiken und Plots an. Wenn Nutzende auf baseR oder auch lattice zurückgriffen, dann wären sie genau an dem zuvor beschriebenen Punkt: sie müssten sich die Frage stellen, welche Art von Graphik am besten die vorliegenden Daten beschreiben könne (also, ob bspw. ein Scatterplot gewählt wird oder ein Boxplot, usw.). Die Nutzenden könnten das bestimmen - und müssten dann mit den gegebenen Parametern arbeiten:

To create a plot, you figure out the closest named graphic and then tweak plot parameters and add primitives to bring your idea to life. For complicated graphics, code is usually imperative: draw a line here, draw text there, do this, do that, and you have to worry about many low-level details10.

Dem gegenüber setzt Wickham nun die Arbeit mittels ggplot2, welche grundsätzlich anders funktioniert, eben weil die Grammar of Graphics hier implementiert wurde:

You think about how your data will be represented visually, then describe that representation using a declarative language. The declarative language, or grammar, provides a set of independent building blocks, similar to nouns and verbs, that allow you to build up a plot piece by piece. You focus on describing what you want, leaving it up to the software to draw the plot11.

Somit könnte man, um grob bei den Worten Wickhams zu bleiben, ggplot2 und die implementierte Grammar of Graphics guten Gewissens als eine Art Sprache bezeichnen.

Inhaltlich 2: Funktionsweise von ggplot2: Einbinden verschiedener Layer mittels eines einfachen +

Die Funktionsweise wird dann nochmals genauer spezifiziert. Wickham beschreibt, was genau er mit den einzelnen Schichten meint. So könnte man beispielsweise bei einem einfachen Scatterplot drei unterschiedlicher “Layer” ausmachen: einerseits die Punkte und deren Größe bzw. Form als die geometrischen Objekte. Weiterhin die Skalen, dazu noch das Koordinatensystem, welches sozusagen den Rahmen darstellt. Fügt man diese “Bauteile” zusammen, so erhält man die grundlegende Graphik 12, welche weiter oben bereits gezeigt wurde.

Diese Philosophie verfolgt nun auch, wie bereits zuvor beschrieben wurde, ggplot2 in der aktiven Umsetzung innerhalb von R. Jede ggplot2-Graphik besteht im Grunde aus diesen Komponenten:

  1. Daten, die für den Plot verwendet werden sollen. Diese werden mittels des Parameters data spezifiziert.
  2. Aesthetic mappings: Hier wird mittels aes()spezifiziert, welche Variablen geplotted werden, wie diese arrangiert werden sollen, welche Formen angenommen werden sollen, welche Farben zu welchen Variablen zugewiesen werden, usw. Die Möglichkeiten sind extrem vielfältig.
  3. Geoms: Die Art und Weise, auf welche die in 1. und 2. gegebenen Informationen graphisch umgesetzt bzw. visualisiert werden sollen. Geoms verschiedenster Formen können wiederum geschichtet werden, um verschiedene Layer übereinander zu legen.

Bei diesen drei Schritten ist zu beachten: Begonnen wird eine Graphik, indem ggplot() in der IDE nach Wahl geschrieben wird. welche Daten und ästhetischen Mappings verwendet werden ist sowohl einerseits global (innerhalb der Klammern von ggplot()) als auch lokal (innerhalb der einzelnen geoms) möglich. Dies steigert wiederum erneut die Möglichkeiten der Schichtung verschiedener Visualisierungsoptionen. Intuitiv wird die Verwendung des Packages auch dadurch, dass die einzelnen Layer einfach mittels eines +-Zeichens sozusagen “aufaddiert” werden. Während also in Plots in baseR teilweise mit for-loops oder dergleichen gearbeitet werden muss, um verschiedene Ebenen zu erzeugen, reicht ein einfaches + in ggplot2 schon aus.

Einige Beispiele für die Funktionsweise von ggplot2 “in Aktion” lassen sich im Analyseteil dieses Dokumentes finden.

Inhaltlich 3: Weitere Vereinfachung der Nutzung von ggplot2 durch Nutzung von esquisse

Den Nutzenden, die eventuell jedoch einen Wechsel von baseR hin zu ggplot2 planen, erscheint diese Art der Syntax eventuell noch ein wenig fremd. Ebenso könnte es sich für gänzlich neue R-NutzerInnen ergeben, dass ein mehrzeiliges ggplot()-Statement auf den ersten Blick etwas verwirrend aussieht.

Um Nutzenden dennoch eine Möglichkeit zu geben, intuitiv und so schnell wie möglich einen visuellen Überblick über spezielle Daten zu erhalten, wurde das Package esquisse von Fanny Meyer, Victor Perrier und deren Team entwickelt, welches für die Nutzenden ein shiny-Addin für RStudio installiert, mit dem das Generieren und direkte Betrachten von Graphiken im Format von ggplot2 ermöglicht wird. Ebenso wird der erforderliche Code für erstellte Graphiken angezeigt, sodass dieser einfach kopiert und übernommen werden kann, sollte sich eine Graphik für eine bestimmte Form von Report o. Ä. als relevant erweisen13.

Zur Nutzung des Packages muss ganz einfach in RStudio auf “Addins” geklickt werden. Dann kann ein Datensatz ausgewählt werden, die Variablen für den Plot den man kreieren möchte werden an esquisse weitergegeben und man kann die Form des Plots bestimmen. Zum Schluss kann, sofern gewünscht, der Code kopiert werden. Es können praktisch alle Optionen von ggplot2 ausprobiert werden, während esquisse in Echtzeit den Plot dafür zusammenstellt. Dies ist sowohl für erfahrenere Nutzende, die eine spezifische Funktion eines Layers suchen, als auch für Neulinge, die einen Einstieg für ggplot2 über “learning by doing” finden möchten.

Datenteil: Daten aus dem ALLBUS 2018

Als Datengrundlage für vorliegende Arbeit wurden, wie bereits in der Einleitung erwähnt, die ALLBUS-Daten von 2018 genutzt. Dabei handelt es sich um die ALLgemeine BevölkerungsUmfrage der Sozialwissenschaften, welche repräsentative Daten für Deutschland liefert. Eine Auswahl der interessantesten Themenbereiche umfasst z. B.:

  • Politik - hier geht es vor allem um Fragen der politischen Soziologie und der Wahl und Einstellungsforschung: welche Parteienpräferenz haben die Teilnehmenden der Befragung, also die klassische “Sonntagsfrage”. Wo würden sie sich auf einer Links-Rechts-Skala selbst einordnen? Werden sie überhaupt an der nächsten Wahl teilnehmen? Es gibt jedoch auch komplexere Messungen bzw. Operationalisierungen, wie z. B. Fragebatterien zum Thema Populismus und populistischen Einstellungen.

  • Ökonomie - in diesem Bereich stellen sich Fragen nach der wirtschaftlichen Situation der Individuen, jedoch z. B. auch nach deren Einschätzungen der ökonomischen Performance des Landes an sich.

  • Demographie - hierbei handelt es sich um Fragen zu klassischen Identifikationsvariablen wie Alter, Geschlecht oder Staatsangehörigkeit. Darüber hinaus gibt es jedoch auch Fragen zum familiären Hintergrund der Teilnehmenden.

Für einen genauen Überblick über die Gesamtheit der verfügbaren Variablen und Frageitems sei auf das Codebuch zum ALLBUS 2018 hingewiesen14, welches qualitativ ebenso auf einem sehr hohen Niveau angesiedelt ist.

Besonders interessant macht diese Daten, dass sie sehr einfach in der Nutzung sind. Anders als z. B. über Webscraping oder Zugriff via APIs erhaltene Daten sind diese von Seiten des GESIS kuratiert. Dies bringt es mit sich, dass die Daten schon in einem ansprechenden Format vorliegen und direkt für die Nutzung bereit sind. Außerdem, wie bereits angesprochen, wurden sie mit Fokus auf Repräsentativität erhoben: durch die Gewichtungsvariablen, welche ebenfalls bereits vorkalkuliert im Datensatz enthalten sind, können Regressionsmodelle o. Ä. Verfahren gewichtet werden, um die Über- bzw. Unterrepräsentation von Befragten in Ost- bzw. Westdeutschland zu kompensieren und so aus den Ergebnissen derer zu repräsentativen Aussagen über die Grundgesamtheit zu gelangen.

Analyseteil: Praktische Nutzung von ggplot2

Analyse 1: Thema “Herkunft und Parteienpräferenz” im ALLBUS (Kombination von ggplot2 und plotly für interaktive Graphiken)

Um nun die Vorzüge und Möglichkeiten von ggplot2 nicht nur zu beschrieben, sondern auch praktisch umzusetzen, sollen nun, wie in der Einleitung angekündigt, einige exemplarische Analysen durchgeführt werden. Zunächst wird anhand der ALLBUS-Daten ein kurzer Überblick über den Zusammenhang von Herkunft innerhalb Deutschlands (“Alte” vs. “Neue” Bundesländer) und der Parteipräferenz von Wählern gegeben.

So könnte man sich beispielsweise dafür interessieren, wo die genauen Unterschiede zwischen diesen Wählerpopulationen liegen. Es herrschen die gängigen Annahmen vor, dass die AfD als Partei im Osten Deutschlands mehr Stimmen generieren kann als im Westen des Landes. Außerdem wurden, unter anderem im Zuge der Wahlen in Sachsen-Anhalt, die Probleme der Grünen im Osten angesprochen, welche dazu führen, dass die Partei dort eher weniger stark Fuß fassen kann.

Diese Unterschiede könnte man natürlich auch mittels eines Blicks auf “nackte Zahlen” einer (relativen) Häufigkeitsverteilung untersuchen - doch ist ein solcher übersichtlicher, einfacher und klarer, wenn man sich der graphischen Darstellung mittels ggplot2 bedient.

Die Graphik wurde mittels plotly interaktiv gestaltet, sodass bei Betrachtung im HTML-Output Informationen (z. B. die Gruppe, also Ost/West; die Gewichtung; den Anteil der Partei an der prozentualen Verteilung) angezeigt werden, sobald der Mauszeiger über eine farblich abgehobenen Kategorie geführt wird. Ebenso können per Doppelklick auf eine Kategorie der Legende alle anderen Kategorien ausgeblendet werden, was einen Vergleich zwischen “Ost” und “West” enorm einfach macht.

Zur Graphik selbst ist zu sagen, dass mittels des Parameters position = "fill" für das gewählte geom_bar eine Anpassung an die volle Höhe des Koordinatensystems vorgenommen wurde. Diese “Standardisierung” der Werte führt zu einer bestmöglichen Vergleichbarkeit zwischen den Gruppen.

Es kann aus der Graphik somit einfach herausgelesen werden, dass die Wählerschaften der Linken und der AfD (Stand 2018) im Osten Deutschlands wesentlich größer sind, als im Westen. Darüber hinaus bestätigt sich das Bild, dass es die Grünen im Osten des Landes schwer haben, vergleicht man die beiden Gruppen in Ost und West. Es fällt für das Jahr 2018 ebenso auf, dass die Gruppe der NichtwählerInnen im Osten des Landes unübersehbar größer ist, als im Westen. Alle diese Ergebnisse wurden zudem über den weight-Parameter und eine dafür vorgesehene Variable des ALLBUS gewichtet, da die Befragten aus dem Osten Deutschlands im ALLBUS im Verhältnis zum wahren Bevölkerungsanteil überrepräsentiert sind.

Analyse 2: Visualisierung von Regressionsmodellen - Beispiel anhand eines multivariaten linearen Modells

Weiterhin lassen sich mittels ggplot2 auch aussagekräftige graphische Analysen von Regressionsmodellen durchführen. Als Beispiel soll hier ein kleines, unkompliziertes lineares Regressionsmodell gerechnet werden. Dabei soll thematisch das Einkommen der Befragten des ALLBUS über die Prädiktoren Alter (age), Herkunft (ostwest) und Geschlecht (sex) vorhergesagt werden. Danach wird zur Interpretation zunächst auf die Zahlen geblickt, dann wird besagte Graphik zur Veranschaulichung erstellt.

Dies soll zeigen, wie hilfreich Visualisierungen auch bei (hier sehr einfach gehaltenen) Regressionen sein können. Es bietet sich in jedem Fall an, nicht nur die Zahlen in einem Report zu berücksichtigen, sondern auch mindestens als Zusatz graphisch zu arbeiten - denn es kann bspw. im Falle einer Präsentation im Beruf oder dergleichen nicht immer vorausgesetzt werden, dass sofort alle Teilnehmenden die Diskussion der Koeffizienten aus dem Stegreif durchdringen und verstehen.

  inc
Predictors Estimates CI p
(Intercept) 1852.55 1711.39 – 1993.70 <0.001
age 5.87 3.39 – 8.35 <0.001
ostwest: Ost -323.94 -442.73 – -205.15 <0.001
sex: Weiblich -882.97 -972.19 – -793.75 <0.001
Observations 3477
R2 / R2 adjusted 0.109 / 0.108

Wie zu sehen ist, bietet die Visualisierung mittels ggplot2 hier eine gute Möglichkeit, den Fokus auf bestimmte Thematiken zu setzen. Sieht man sich den Output der Regression als reine Tabelle an, so erhält man selbstverständlich interpretierbare Koeffizienten - dies steht außer Frage.

Doch kann mit Hilfe von ggplot2 und der Möglichkeit, die Funktion facet_wrap() einzusetzen, ein gänzlich anderer Fokus gesetzt werden. So kann z. B. der Blick für einzelne Gruppen kategorialer Variablen geschärft werden. Inhaltlich könnte zwar noch, sofern dies dann gewünscht wäre, an den Outliers und den den einflussreichsten Observationen gearbeitet werden, dennoch lässt sich bereits der Trend aus der ggplot2-Graphik herauslesen, dass das Einkommen in Westdeutschland mit dem Alter der Befragten zunimmt - während im Osten des Landes eher eine Stagnation bis Verminderung dessen vorherrscht. Ein solcher Blick auf die rohen Daten ist äußerst wertvoll und durch ggplot2 und die Nutzung von dessen vielseitigen Layern möglich.

Analyse 3: “Warum ggplot2 und nicht einfach baseR?” - Praxisbeispiel

Als letztes Beispiel soll, wie bereits zu Beginn im inhaltlichen Teil angekündigt, auf die Unterschiede zwischen ggplot2 und baseR von der praktischen Seite aus eingegangen werden. Viele Nutzende stehen, wie bereits erwähnt, vor dieser Wahl, wenn sie ihre Ergebnisse visuell aufbereiten möchten. An dieser Stelle soll deshalb anhand der gleichen Daten und der gleichen Ziel-Graphik gezeigt werden, wie die Syntax dafür aussehen würde. Anschließend soll gezeigt werden, wieso vorliegende Arbeit ggplot2 bevorzugt.

Kritische Stimmen, die immer wieder die ästhetischen Merkmale bzw. “Vorzüge” eines der beiden Packages gegenüber des anderen hervorheben, wurden hier bewusst ignoriert. Mit den zur Verfügung stehenden Optionen ist es sehr einfach, Graphen sowohl in baseR, als auch in ggplot2 nach eigenem Geschmack oder bestimmten Designvorgaben zu verändern - einzig die Umsetzung dessen sollte also im Vordergrund stehen.

boxplots_ggplot2 <- ggplot(allbus) +
  geom_boxplot(aes(x = ostwest, y = age, fill = ostwest, weight = wghtpew), size = 0.75, outlier.colour = NA) +
  facet_wrap(. ~ sicherheit, nrow = 3) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1), legend.position = "bottom") +
  theme_economist(base_size = 7) +
  ggtitle(label = "Flüchtlinge: Chance oder Risiko\nbeim Thema Sicherheit?", subtitle = "Alter der Befragten, nach West-/Ostdeutschland und Antwort gruppiert") +
  ylab("Alter der Befragten") +
  xlab(" ") +
  scale_fill_manual("Herkunft", values = c("#191970", "#9a0e2a"))

boxy <- boxplots_ggplot2 +
  coord_cartesian(ylim = c(0, 100))

boxy

par(xaxs = "i", xaxt = "n")

x <- boxplot(age ~ ostwest*sicherheit,
        data = allbus,
        col = c("#191970", "#9a0e2a"),
        frame = FALSE,
        outline = FALSE,
        main = "Flüchtlinge: Chance oder Risiko beim Thema Sicherheit?",
        sub = "Alter der Befragten, nach West-/Ostdeutschland und Antwort gruppiert",
        xlab = " ",
        ylab = "Alter der Befragten",
        xaxt = "n",
        las = 2)
axis(1, at=seq(1, 14, by = 1), labels = T)
text(seq(1, 14, by=1), par("usr")[3]-8, labels = c("W-k.A.", "O-k.A.", "W-Weiß nicht", "O-Weiß nicht", "W-Risiko überw.", "O-Risiko überw.", "W-Eher Risiko", "O-Eher Risiko", "W-Teils/Teils", "O-Teils/Teils", "W-Eher Chance", "O-Eher Chance", "W-Chance überw.", "O-Chance überw."), srt = 70, pos = 1, xpd = T, cex = 0.6)
legend(x = "topright", legend = c("West", "Ost"), fill = c("#191970", "#9a0e2a"), cex = 0.8)

box()

Für die Erstellung der hier vorliegenden Boxplots sind bewusst viele zusätzliche Optionen zur Veranschaulichung der unterschiedlichen Herangehensweisen verwendet worden. Zudem wurde in diesem Fall ebenso bewusst die Syntax zu den Graphiken mit ausgegeben, um einen Vergleich bzw. eine genauere Auseinandersetzung damit zu ermöglichen. Wie aus den beiden Graphiken heraus zu sehen ist, wurde ein zumindest vergleichbares Ergebnis mit den zur Verarbeitung an R gegebenen Daten erreicht. Hätte man jedoch bezüglich der graphischen Ausgestaltung wirklich ein identisches Ergebnis erreichen wollen, so hätte man die Variable sicherheit in baseR für jede ihrer Kategorien plotten und dann mittels der Funktion par(mfrow = x) auf diese Weise anordnen müssen.

Bei einem Blick auf den Code lässt sich also feststellen: die Syntax im ggplot2-Beispiel könnte man getrost als “human readable” bezeichnen, wohingegen dies im Falle des boxplot()-Befehls aus baseR wohl eher nicht behauptet werden könnte. Grund dafür ist, dass die einzelnen, mittels eines +-Zeichens aufgestapelten Layer sehr deskriptive Funktionsnamen aufweisen, während in baseR pro Graph eine Funktion allein genutzt wird. Die Parameter dieser Funktion bilden dann das Gegenstück zu den Layern in ggplot2 (wie hier am Beispiel eines Boxplots gezeigt).

Darüber hinaus sind die Funktionen in ggplot2 sehr deklarativ, d. h. allein durch das Lesen der Namen der Funktion weiß der Nutzende, welchen Zweck sie erfüllen. Sieht man sich den Code für die Boxplots in baseR an, so kann zurecht konstatiert werden, dass dies hier nicht der Fall ist. Dies erleichtert die Arbeit durch Nutzung von ggplot2 enorm, der Code aus baseR wirkt unordentlich - dementsprechend wirkt leider auch die Graphik. Als gutes Beispiel kann man sich die x-Achsen-Labels herausnehmen, welche mittels ggplot2 wesentlich einfacher eingerichtet werden konnten, oder auch das “themeing” des Plots, welches in baseR nur über den zuvor auszuführenden Befehl par() möglich ist, während in ggplot2 ein einfacher weiterer Layer ausreicht. Zudem sind die Abkürzungen für die verschiedenen Parameter in baseR mehr als nur verwirrend für die Nutzenden, was erneut viel Zeit in Anspruch nimmt, da die Dokumentation konsultiert werden muss.

Was baseR in jedem Fall aber zu Gute gehalten werden sollte ist, dass es Graphen extrem schnell plotten kann. Sobald die Syntax ausgeführt wurde, ist der gewünschte Graph auch schon erzeugt. Bei ggplot2 hingegen ist eine sehr kurze Wartezeit zu erwarten (jedoch in keinem Fall länger als 5 Sekunden). Somit kann man in der Praxis in R, sofern man nur schnell einen Über- bzw. Einblick in die Beziehung von Variablen untereinander erlangen möchte, getrost auf baseR zurückgreifen - doch für die Visualisierung innerhalb eines Reports würde vorliegende Arbeit anraten, in jedem Fall ggplot2 zu verwenden, da der Code wesentlich einfacher “lesbar” ist. Dies ist besonders in solchen Fällen von großem Nutzen, wenn Arbeiten oder Berichte nach einiger Zeit nochmals angesehen werden.

Nutzende sind im Falle von ggplot2 schnell wieder im Bild. Weiterhin lohnt eventuell, sofern Nutzende noch nicht allzu bekannt mit ggplot2 sind, auch der Blick auf das Package ggpubr, welches Plots verspricht, die “publication ready” sind, ohne allzu vertraut mit den Möglichkeiten der Grammar of Graphics sein zu müssen. Außerdem sei erneut, sofern im HTML-Format gearbeitet wird, auf die Möglichkeiten der Gestaltung von ggplot2-Graphen als interaktive Graphen mittels plotly hingewiesen - ein Feature, das ggplot2 ebenso von baseR abhebt.

Schlussbemerkungen und Fazit

Es kann zum Abschluss also das folgende Fazit zum Package ggplot2 in R gezogen werden: es lohnt sich generell als R-Nutzender, einen Blick auf dieses Package zu werfen. Es konnte sich neben baseR als zentrale Alternative zur Gestaltung von Visualisierungen und Graphiken durchsetzen - und als Teil des tidyverse, welches von vielen Nutzenden ohnehin geschätzt wird, ist auch keine zusätzliche Installation nötig. Es werden nun noch einmal zum Abschluss auf einen Blick die für diese Arbeit größten Vorteile bzw. “selling points” des Packages einzeln hervorgehoben:

1. ggplot2 ist extrem vielseitig in der Nutzung und bietet mehr Möglichkeiten, als baseR oder andere Graphik-Packages.

Durch die Implementierung der “Grammar of Graphics” nach Wilkinson, bzw. der Schaffung seiner eigenen Version dieser, gelang es Hadley Wickham und dem Team hinter dem tidyverse, für ggplot2 ein großes Alleinstellungsmerkmal im Bereich der Visualisierung zu schaffen: die große Modularität und Vielseitigkeit, die sich durch die Kombination der Layer, aber auch durch Optionen wie das Faceting ergeben. Dadurch, dass man nicht nur einen Graph an sich visualisiert, sondern praktisch jedes Merkmal und jede Ebene dessen einzeln bestimmen, verändern und erzeugen kann, so wie es die Situation erfordert, ergibt sich gegenüber baseR und auch anderen Packages wie lattice ein großer Vorteil für die Nutzenden von ggplot2, da eine derartig einfache Umsetzung solcher Visualisierungswünsche dort nicht möglich ist.

2. Der Einstieg in ggplot2 für neue Nutzende (sowohl des Packages, aber auch insgesamt für R-Neulinge) ist durch die große Verfügbarkeit von vielerlei Ressourcen sehr einfach gestaltet.

Dieser Punkt spricht ebenso für das Package. Es gibt zahlreiche, qualitativ hochwertige Ressourcen, die darüber hinaus auch oftmals noch kostenlos online verfügbar sind. So publizieren u. a. Hadley Wickham und das ggplot2-Team ihre Bücher via bookdown kostenfrei im Internet. Für viele dieser Bücher besteht außerdem die Wahl, diese trotzdem als Taschenbuch zu erstehen und damit die Entwickler zusätzlich zu unterstützen (dies zeigt stark die Freiwilligkeitsbasis, welche in der Open Source-Branche großgeschrieben wird).

Doch darüber hinaus ermöglicht diese gute Verfügbarkeit der Ressourcen auch neuen angehenden R-Nutzenden, sich mit möglichst wenig finanziellem Aufwand einen qualitativ hochwertigen Überblick verschaffen zu können. Gerade für Studierende ist damit R an sich generell die beste Wahl, wenn es um Statistiksoftware geht und lässt Konkurrenz wie Stata oder SPSS hinter sich - und ggplot2 trägt hierzu als Puzzelstück des tidyverse einen entscheidenden Teil dazu bei.

3. Die Integration von ggplot2-Visualisierungen in RMarkdown ist nahtlos und vereinfacht die Arbeit ungemein - sowohl für Studierende als auch für z. B. Data Science Teams.

Auch hier sollte der Blick geweitet und auf die Konkurrenz (Stata, SPSS) hingewiesen werden. Während dort ein Fenster in Microsoft Word geöffnet wird, dann ein Graph erstellt, gespeichert und exportiert sowie danach mühevoll passend in ein Dokument im .docx-Dateiformat eingefügt werden muss, ist R durch die Entwicklung von RMarkdown und eine IDE wie RStudio wesentlich effektiver. Mittels RMarkdown wird also sowohl die Arbeit von Studierenden, als auch jene von Data Science Teams o. Ä. extrem erleichert.

Hier kommt dann erneut die Vielseitigkeit von ggplot2 zum Tragen: Graphen lassen sich extrem einfach in Codeblöcken in Reports einbringen und vereinfachen somit die Kommunikation von Daten mit Außenstehenden. Hierbei ist erneut ggplot2 gegenüber baseR nach der Meinung dieser Arbeit die bessere Wahl: so können z. B. im HTML-Format interaktive Graphiken erstellt werden und die Nutzenden der Features profitieren, wie bereits gesagt, von vereinfachtem Syntax (vgl. 3.4) und großer Modularität.

4. Für ggplot2 gibt es eine sehr gute Einbindung in das Ökosystem von R, wodurch viele Packages entstanden, die ggplot2 ergänzen.

Hier wurde bereits das Beispiel esquisse angesprochen, welches die Arbeit mit ggplot2 vereinfachen kann, indem es ein klickbares shiny-Interface zur Ploterstellung schafft. Außerdem wurde plotly zu Demonstrationszwecken in Analyse 1 verwendet, um ggplot2-Graphiken interaktiv zu gestalten. Ähnliches wird beispielsweise auch mit dem Package gganimate versucht.

Dies sind jedoch nur einige ausgewählte Beispiele. Außerdem ist durch die Integration ins tidyverse die gemeinsame Nutzung von ggplot2 mit dessen Packages gewährleistet. Dies bedeutet unter anderem auch, dass hier das beliebte Mittel der Pipe (%>%) genutzt werden kann. Darüber hinaus wurden zahlreiche Möglichkeiten zur graphischen Ausgestaltung ergänzt, als Beispiel sei auf die genutzten Plot-Farbschemata (theme_economist() oder theme_few()) hingewiesen, welche aus dem Package ggthemes stammen. Andere Packages in diesem Bereich sind z. B. hrbrthemes oder auch ggtext, welches das Einfügen von Text in Graphiken erleichtert.

Abschließend kann also konstatiert werden, dass durch ggplot2 und das gesamte tidyverse eine Vielzahl von Verbesserungen für R implementiert werden konnten. Diese sollten dazu führen, dass nicht nur in der Wirtschaft, sondern auch an den Universitäten im Bereich der Datenanalyse veraltete und wenig innovationsfreudige Tools wie SPSS oder Stata durch nutzerfreundliche und zukunftsträchtige wie R oder aber auch Python abgelöst werden.

Für das vorliegende Portfolio findet sich, sollte Interesse bestehen, unter diesem Link ein zugehöriges GitHub-Repository, welches zum Überblick und zur Versionskontrolle/externen Speicherung bei der Erstellung genutzt wurde.

Literatur

Baumann, Horst, Sonja Schulz, und Sarah Thiesen. 2018. „ALLBUS 2018 - Variable Report“. GESIS Datenarchiv, Köln.
Finnstats. 2021. „15 Essential Packages in R for Data Science“. https://finnstats.com/index.php/2021/04/07/essential-packages-in-r/.
GESIS. 2019. „Allgemeine Bevölkerungsumfrage der Sozialwissenschaften ALLBUS 2018“. GESIS Datenarchiv, Köln. ZA5270 Datenfile Version 2.0.0, https://doi.org/10.4232/1.13250. https://doi.org/10.4232/1.13250.
Meyer, Fanny, und Victor Perrier. 2021. „esquisse Package in R“. https://dreamrs.github.io/esquisse/index.html.
Robinson, David. 2016. „Why I use ggplot2“. http://varianceexplained.org/r/why-I-use-ggplot2/.
StatsInTheWild. 2019. „ggplot2 vs. baseR graphics: An example“. http://https://statsinthewild.com/2019/08/22/ggplot2-vs-base-r-graphics-an-example/.
Wickham, Hadley. 2010. „A layered grammar of graphics“. Journal of Computational and Graphical Statistics 19 (1): 3–28. https://doi.org/10.1198/jcgs.2009.07098}.
———. 2011. „ggplot2“. Wiley Interdisciplinary Reviews: Computational Statistics 3 (2): 180--185. https://doi.org/10.1002/wics.147.
Wickham, Hadley, und Garret Grolemund. 2017. R for Data Science. Import, Tidy, Transform, Visualize, and Model Data. Sebastopol, CA: O’Reilly.
Wickham, Hadley, Danielle Navarro, und Thomas Lin Pedersen. 2009. ggplot2 - Elegant Graphics for Data Analysis. Second Edition. New York: Springer.
Wilkinson, Leland. 2005. The Grammar of Graphics. Statistics and Computing. New York: Springer.

  1. Wickham und Grolemund (2017), S. 3↩︎

  2. Finnstats (2021)↩︎

  3. GESIS (2019)↩︎

  4. Wickham, Navarro, und Pedersen (2009), Section 1.1↩︎

  5. StatsInTheWild (2019)↩︎

  6. Robinson (2016)↩︎

  7. Wilkinson (2005)↩︎

  8. Wickham (2010), S. 3f.↩︎

  9. Wickham (2010), S. 6↩︎

  10. Wickham (2011), S. 2↩︎

  11. Wickham (2011), S. 2↩︎

  12. Wickham (2010), S. 6↩︎

  13. Meyer und Perrier (2021)↩︎

  14. Baumann, Schulz, und Thiesen (2018)↩︎